import numpy as np

if __name__ == "__main__":
    A = np.array([[1, 2],
                  [3, 4]])
    print(A)
    print("====")
    print(A.shape)  # 矩阵形状
    print("====")
    print(A.T)  # 矩阵转置
    print("====")
    print(A[1, 1])  # 获取元素
    print("====")
    print(A[0])  # 获取行
    print("====")
    print(A[:, 0])  # 获取列 :切片所有行，0:取第0列
    print("====")
    print(A[1, :])  # 切片获取第一行
    print("====")

    B = np.array([[5, 6],
                  [7, 8]])
    print(A + B)
    print("====")
    print(A - B)
    print("====")
    print(10 * A)
    print("====")
    print(A * 10)
    print("====")
    print(A * B)  # numpy 中的 *: element-wise multiplication  对应元素相乘的矩阵
    print("====")
    print(A.dot(B))  # 数学中的矩阵乘法
    print("====")

    p = np.array([10, 100])
    print(A + p)  # numpy中的矩阵+向量是矩阵的每一行分别和向量相加
#     numpy中高维可以和低维运算，名词为广播
    print("====")
    print(A + 1)  # 高维中的每个元素分别和低维运算
    print("====")
    print(A.dot(p))  # 矩阵乘以向量
    print("====")

    print(np.identity(2))  # 创建单位矩阵
    invA = np.linalg.inv(A)  # 获得 A 的逆矩阵
    print(invA)
    print(invA.dot(A))
    print(A.dot(invA))




